package com.study.spmongodb.book.wwj.char14;

import java.net.Socket;
import java.sql.Connection;

/**
 * @author study
 * @version 1.0
 * @date 2020/11/27 10:24
 */

//Double - Check|Volatile+Double-Check
public class Singleton4 {
    //实例变量
    private byte[] data = new byte[1024];
    //定义实例，但是不能直接初始化
    private volatile static Singleton4 instance = null;
    Connection conn;
    Socket socket;

    private Singleton4() {
        //this.conn 初始化conn
        //this.socket 初始化socket
    }

    // 向getInstacne方法加入同步控制，每次只能有一个线程进入
    public static Singleton4 getInstance() {
        //当instance为null时，进入同步代码块，同时该判断避免了每次都需要进入同步代码块，可以提高效率
        if (null == instance) {
            //只有一个线程能够获得 Singleton4
            synchronized (Singleton4.class) {
                if (null == instance) {
                    instance = new Singleton4();
                }
            }
            instance = new Singleton4();
        }
        return instance;
    }
}
